package com.edu.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * @Author:mx
 * @Date:2025/10/31-9:51:51
 */
/*
*       自定义了一个 Bean后处理器，
*           可以对 已有的所有其他的 bean 进行增强
*       1.实现 BeanPostProcessor
*       2.重写  postProcessBeforeInitialization
*               postProcessAfterInitialization 方法
*
* */
public class MyBeanPostProcessor implements BeanPostProcessor {

    /*
    *    bean后处理器的 前置处理 在对象初始化之前 执行
    *           参数 ：bean指的是 要被 增强的 那个对象
    *                 beanName 指的是 这个对象在配置文件里的 id(name)
    *
    *                 方法的返回值 代表 增强之后的对象（可以生成代理）
    * */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("4 执行了 bean后处理器的 前置处理");
        //模拟对 学生 bean 进行了 数据校验
//        if(bean instanceof Student){
//            Student stu = (Student)bean;
//            if(stu.getStuAge() < 0) {
//                stu.setStuAge(18);
//            }
//            return new StudentProxy(stu);
//        }
        return bean;
    }

    /*
    *       bean后处理器的 后置处理 在对象初始化之后 执行
    *            参数 ：bean指的是 要被 增强的 那个对象
     *                 beanName 指的是 这个对象在配置文件里的 id(name)
     *                 方法的返回值 代表 增强之后的对象（可以生成代理）
    * */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("7 执行了 bean后处理器的 后置处理");
       return bean;
    }
}
